﻿using System;
using System.ServiceModel;

using OCXS.OCXSServiceLibrary.OPCXMLDA10;

namespace OCXS.OCXSServiceLibrary {

    /// <summary>
    /// Interface for OPC XML DA 1.0 service methods.
    /// </summary>
    [ServiceContract(Namespace = "http://opcfoundation.org/webservices/XMLDA/1.0/")]
    public interface IOPCService {

        /// <summary>
        /// OPC XML DA 1.0 Browse.
        /// </summary>
        /// <param name="request">OPC XML DA 1.0 browse request object.</param>
        /// <returns>OPC XML DA 1.0 browse response object.</returns>
        [OperationContract(Action = "http://opcfoundation.org/webservices/XMLDA/1.0/Browse", ReplyAction = "*")]
        BrowseResponse Browse(BrowseRequest request);

        /// <summary>
        /// OPC XML DA 1.0 GetProperties.
        /// </summary>
        /// <param name="request">OPC XML DA 1.0 get properties request object.</param>
        /// <returns>OPC XML DA 1.0 get properties response object.</returns>
        [OperationContract(Action = "http://opcfoundation.org/webservices/XMLDA/1.0/GetProperties", ReplyAction = "*")]
        GetPropertiesResponse GetProperties(GetPropertiesRequest request);

        /// <summary>
        /// OPC XML DA 1.0 GetStatus.
        /// </summary>
        /// <param name="request">OPC XML DA 1.0 get status request object.</param>
        /// <returns>OPC XML DA 1.0 get status response object.</returns>
        [OperationContract(Action = "http://opcfoundation.org/webservices/XMLDA/1.0/GetStatus", ReplyAction = "*")]
        GetStatusResponse GetStatus(GetStatusRequest request);

        /// <summary>
        /// OPC XML DA 1.0 Read.
        /// </summary>
        /// <param name="request">OPC XML DA 1.0 read request object.</param>
        /// <returns>OPC XML DA 1.0 read response object.</returns>
        [OperationContract(Action = "http://opcfoundation.org/webservices/XMLDA/1.0/Read", ReplyAction = "*")]
        ReadResponse Read(ReadRequest request);

        /// <summary>
        /// OPC XML DA 1.0 Subscribe.
        /// </summary>
        /// <param name="request">OPC XML DA 1.0 subscribe request object.</param>
        /// <returns>OPC XML DA 1.0 subscribe response object.</returns>
        [OperationContract(Action = "http://opcfoundation.org/webservices/XMLDA/1.0/Subscribe", ReplyAction = "*")]
        SubscribeResponse Subscribe(SubscribeRequest request);

        /// <summary>
        /// OPC XML DA 1.0 SubscriptionCancel.
        /// </summary>
        /// <param name="request">OPC XML DA 1.0 subscription cancel request object.</param>
        /// <returns>OPC XML DA 1.0 subscription cancel response object.</returns>
        [OperationContract(Action = "http://opcfoundation.org/webservices/XMLDA/1.0/SubscriptionCancel", ReplyAction = "*")]
        SubscriptionCancelResponse SubscriptionCancel(SubscriptionCancelRequest request);

        /// <summary>
        /// OPC XML DA 1.0 SubscriptionPolledRefresh.
        /// </summary>
        /// <param name="request">OPC XML DA 1.0 subscription polled refresh request object.</param>
        /// <returns>OPC XML DA 1.0 subscription polled refresh response object.</returns>
        [OperationContract(Action = "http://opcfoundation.org/webservices/XMLDA/1.0/SubscriptionPolledRefresh", ReplyAction = "*")]
        SubscriptionPolledRefreshResponse SubscriptionPolledRefresh(SubscriptionPolledRefreshRequest request);

        /// <summary>
        /// OPC XML DA 1.0 Write.
        /// </summary>
        /// <param name="request">OPC XML DA 1.0 write request object.</param>
        /// <returns>OPC XML DA 1.0 write response object.</returns>
        [OperationContract(Action = "http://opcfoundation.org/webservices/XMLDA/1.0/Write", ReplyAction = "*")]
        WriteResponse Write(WriteRequest request);

    }

} /* OCXS.OCXSServiceLibrary */
